package com.wpzf.zxhc.utils;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

import java.io.File;
import java.util.List;


public class MultipleFileUnZip {
    public Boolean fileUnZip(String inFilePath, String outPath) throws Exception {
        try {
            //待解压的zip文件，需要在zip文件上构建输入流，读取数据到Java中
            File zipFile = new File(inFilePath);   // 定义压缩文件名称
            ZipFile zip = new ZipFile(zipFile);
            List<FileHeader> fileHeaders = zip.getFileHeaders();
            /*zip4j默认用GBK编码去解压,这里设置编码为GBK的*/
            zip.setFileNameCharset("GB2312");
            zip.extractAll(outPath);
            return true;
        } catch (Exception e) {
            return false;
        }


//        ZipInputStream zipInput = null;    // 定义压缩输入流
//
//        //定义解压的文件名
//        OutputStream out = null;   // 定义输出流，用于输出每一个实体内容
//        InputStream input = null;  // 定义输入流，读取每一个ZipEntry
//        ZipEntry entry = null; // 每一个压缩实体
//        zipInput = new ZipInputStream(new FileInputStream(file),Charset.forName("GBK"));  // 实例化ZIpInputStream
//
//        //遍历压缩包中的文件
//        while ((entry = zipInput.getNextEntry()) != null) { // 得到一个压缩实体
////            System.out.println("解压缩" + entry.getName() + "文件");
//            InputStream inputStream = zipFile.getInputStream(entry);
//            outFile = new File(outPath+"/" + entry.getName());   // 定义输出的文件路径
//            if (!outFile.getParentFile().exists()) {  // 如果输出文件夹不存在
//                outFile.getParentFile().mkdirs();
//                // 创建文件夹 ,如果这里的有多级文件夹不存在,请使用mkdirs()
//                // 如果只是单纯的一级文件夹,使用mkdir()就好了
//            }
//            if (!outFile.exists()) {  // 判断输出文件是否存在
//                if (entry.isDirectory()) {
//                    outFile.mkdirs();
//                } else {
//                    outFile.createNewFile();
//                }
//            }
//            if (!entry.isDirectory()) {
//                input = zipFile.getInputStream(entry); // 得到每一个实体的输入流
//                out = new FileOutputStream(outFile);   // 实例化文件输出流
//                int temp = 0;
//                while ((temp = input.read()) != -1) {
//                    out.write(temp);
//                }
//                input.close();     // 关闭输入流
//                out.close();   // 关闭输出流
//            }
//
//        }
//        input.close();
    }

    public String fileZip(String zipPath, List<String> fileList) throws ZipException {
        try {
            // 创建一个ZipFile对象，指定要创建的ZIP文件路径
            ZipFile zipFile = new ZipFile(zipPath);

            // 创建压缩参数对象
            ZipParameters zipParameters = new ZipParameters();
            zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 设置压缩方法
            zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 设置压缩级别

            // 循环压缩每个文件
            for (String fileToAdd : fileList) {
                File inputFile = new File(fileToAdd);
                if (inputFile.exists()) {
                    // 将文件添加到ZIP文件中
                    zipFile.addFile(inputFile, zipParameters);
                }
            }
            return "";
        } catch (Exception ex) {
            return ex.toString();
        }
    }
}
